perm filename GRAPHX.SAI[X,ALS] blob
sn#080210 filedate 1974-01-10 generic text, type T, neo UTF8
00010 BEGIN "GRAPH"
00020 DEFINE ⊂="COMMENT";
00030 DEFINE ⊃="⊂";
00040 DEFINE CR="'15",LF="'12",CRLF="CR&LF",TB="'11";
00042 REQUIRE "PLAY.REL" LOAD_MODULE;
00043 ⊂ REQUIRE "TVRLIB.REL[X,ALS]" LIBRARY;
00044 REQUIRE "IO.REL[X,ALS]" LIBRARY;
00045 REQUIRE "SUIO.REL[X,ALS]" LIBRARY;
00046 REQUIRE "LIB.REL[NET,NJM]" LIBRARY;
00047 EXTERNAL FORTRAN PROCEDURE FMAIN;
00050 REQUIRE "DPYSUB.HDR[1,PDQ]" SOURCE_FILE;
00060 INTEGER I,J,K,L,M,X,Y,LX,LY,DX,DY,CHAN5,EOF,PP,POINTP,FLAG,MUTE,NUM;
00070 STRING FILEP,FILEN,READ; BOOLEAN ER;
00080 INTEGER ARRAY SAVE[0:5];
00090 INTEGER ARRAY LFILE[0:127];
00100 INTEGER ARRAY NEW[0:511];
00110 INTEGER ARRAY DPYBUF[0:4096];
00115 INTEGER A1,A2,A3;
00120 LABEL STARTP;
00130
00140 ⊂ Allow 1140 units on a line corresponding to 76 charactters @15 units,
00150 380 segments @ 3 and 48640 samples @ 3/128 unit, or 2.432 seconds;
00160
00170 INTERNAL PROCEDURE CALCOMP(STRING FILE;INTEGER ARRAY BUFR);
00180 ⊂ Outputs display buffer BUFR to disk file FILE in a format
00190 readable by the Nealy Calcomp plotter program PLTVEC, and by
00200 the Quam Video Synthesizer program MIRTOP;
00210 IF FILE THEN
00220 BEGIN INTEGER DSIZ,CCCHN;
00230 OPEN(CCCHN←GETCHAN,"DSK",'14,0,1,0,0,0);
00240 ENTER(CCCHN,FILE&".GRF",0);
00250 ⊂ OUTSTR("READY TO DPYPARS");
00260 DPYPARS;DSIZ←BUFR[1]+4;
00270 ⊂ OUTSTR("BACK FROM DPYPARS"&CRLF);
00280 ARRYOUT(CCCHN,BUFR[0],2);WORDOUT(CCCHN,0);
00290 ARRYOUT(CCCHN,BUFR[2],DSIZ-2);
00300 RELEASE(CCCHN);
00310 END "CALCOMP";
00320
00345 MUTE←60; NUM←3;
00350 OUTSTR("The following set-up commands of a letter followed by a number "
00360 &"may be given:"&CRLF);
00370 OUTSTR(" M# sets MUTE level (default value 60)"&CRLF&
00380 " N# sets number of formants (default value 3)."&CRLF);
00390 OUTSTR("A number only uses preset values for M and N and specifies the file to use."
00400 &CRLF&TB&"A CR only calls for file # 1."&CRLF&LF);
00401 OUTSTR("After a display has appeared the following single character "&
00403 "commands may also be given:"&CRLF&TB&"P prepare plotx file for the XGP"
00404 &CRLF&TB&"E exit from the program"&CRLF&TB&"S start over"&CRLF&LF);
00405 STARTP:
00407 SETFORMAT(1,0); FLAG←0; X←0;
00410 WHILE TRUE DO BEGIN "TYPE" OUTSTR("Type command "); READ←INCHWL;
00420 IF READ[1 TO 1]="M" THEN BEGIN MUTE←CVD(READ[2 TO 4]);CONTINUE "TYPE";END;
00430 IF READ[1 TO 1]="N" THEN BEGIN NUM←CVD(READ[2 TO 2]);CONTINUE "TYPE";END;
00440 DONE; END "TYPE";
00450 IF READ="" THEN PP←1 ELSE PP←CVD(READ);
00460 FILEP←"SEG"&CVS(PP)&".SYN[SYN,ALS]";
00465 SETFORMAT(-3,0); FILEN←"HI20."&CVS(PP)&"[CMP,VIN]"; SETFORMAT(1,0);
00470
00480 CLOSE(CHAN5); OPEN(CHAN5,"DSK",'10,2,0,0,0,EOF);
00490 LOOKUP(CHAN5,FILEP,ER);
00500 IF ER THEN OUTSTR("FILE "&FILEP&" NOT FOUND"&CRLF);
00510 ARRYIN(CHAN5,LFILE[0],'200);
00520
00530 DPYSET(DPYBUF); SETFORMAT(2,0); AIVECT(-560,0);
00540 ⊂ Vertical numbers and vertical scale;
00550 FOR K←1 STEP 1 UNTIL 2 DO BEGIN
00560
00570 RIVECT(-35,-7);
00580 FOR I←0 STEP 1 UNTIL 5 DO BEGIN
00590 DPYSST(CVS(I)); RIVECT(-30,75);
00600 END; RIVECT(35,7); RIVECT(0,-450);
00610
00620 FOR I←0 STEP 1 UNTIL 5 DO BEGIN
00630 RIVECT(20,0); RVECT(-20,0);
00640 IF I=5 THEN DONE;
00650 RVECT(0,15);
00660 FOR J←1 STEP 1 UNTIL 4 DO BEGIN
00670 RIVECT(10,0); RVECT(-10,0);RVECT(0,15); END;
00680 END;
00690
00700 RIVECT(0,-375); RVECT(570,0); RVECT(570,0);
00710 AIVECT(-560,-460); END;
00720 ⊃ DPYOUT(0);
00730
00740 FLAG←0; AIVECT(-560,-30);
00750 FOR I←21 STEP 1 UNTIL 127 DO BEGIN "PONY"
00760 IF LFILE[I]=0 THEN DONE;
00770 L←LFILE[I] LAND '777760000000;
00780 J←LDB(POINT(14,LFILE[I],27)); K←LDB(POINT(8,LFILE[I],35));
00790
00800 IF X<J%5 THEN FOR M←X STEP 1 UNTIL J%5 DO BEGIN
00810 DPYSST(" "); X←X+1;
00820 IF X≥76 THEN IF FLAG=0 THEN BEGIN FLAG←1;
00830 AIVECT(-560,-490); ⊂ RIVECT(-570,-460); ⊂ RIVECT(-570,0); END;
00840 IF X≥152 THEN DONE "PONY";
00850 END;
00860 IF K<5 THEN K←5;
00870 FOR M←1 STEP 1 UNTIL K%5 DO BEGIN
00880 DPYSST(CVSTR(L)[1 TO 1]); IF (READ←CVSTR(L)[2 TO 2])≠"" THEN BEGIN
00890 RIVECT(-15,-20); DPYSST(READ); RIVECT(0,20); END;
00900 X←X+1;
00910 IF X≥76 THEN IF FLAG=0 THEN BEGIN FLAG←1;
00920 AIVECT(-560,-490); ⊂ RIVECT(-570,-460); ⊂ RIVECT(-570,0); END;
00930 IF X≥152 THEN DONE "PONY";
00940 END;
00950 END "PONY";
00960 ⊃ DPYOUT(0);
00970
00980 FLAG←0; AIVECT(0,0);
00990
01000 FOR I←0 STEP 1 UNTIL 5 DO SAVE[I]←0;
01010 WHILE EOF=0 DO BEGIN "DATIN"
01020 ARRYIN(CHAN5,NEW[0],512);
01030
01040 FOR I←1 STEP 1 UNTIL NUM DO BEGIN "PLOT"
01050 LY←SAVE[I]; LX←SAVE[0]; RIVECT(LX-560,LY);
01060 FOR J←0 STEP 8 UNTIL 504 DO BEGIN
01070 IF NEW[J]=0 THEN DONE;
01080 X←(NEW[J] LSH -15)*3%128;
01090 IF FLAG=2 THEN BEGIN X←X-1140; IF X>1140 THEN DONE; END;
01100 IF (LX≥1140)∧(FLAG=0) THEN BEGIN
01110 FLAG←1; RIVECT(-570,-460); RIVECT(-570,0); END;
01120
01130 POINTP←POINT(9,NEW[J+1],-1);
01140 FOR K←1 STEP 1 UNTIL I DO IBP(POINTP);
01150 Y← LDB(POINTP)*3;
01160 IF Y=0 THEN Y←LY;
01170 ⊃ OUTSTR(CVS(X)&","&CVS(Y)&TB&TB);
01180 DX←X-LX; LX←X; DY←Y-LY; LY←Y;
01190 ⊂ IF X=0 THEN IF J≠0 THEN BEGIN RIVECT(DX,DY); ⊂ DONE; ⊂ END;
01200 IF (LDB(POINT(9,NEW[J+2],17)) < MUTE)∨(DX<3)
01210 THEN RIVECT(DX,DY) ELSE RVECT(DX,DY);
01220 END;
01230 IF FLAG=1 THEN BEGIN
01240 FLAG←0; RIVECT(570,460); RIVECT(570,0); END;
01250 SAVE[I]←LY; RIVECT(560-LX,-LY);
01260 END "PLOT";
01270 IF X=0 THEN DONE "DATIN";
01280 IF FLAG=2 THEN IF X>1140 THEN DONE "DATIN";
01290
01300 IF LX≥1140 THEN BEGIN FLAG←2;
01310 RIVECT(0,-460); LX←LX-1140; END;
01320 SAVE[0]←LX;
01330 END "DATIN";
01340 CLOSE(CHAN5); RELEASE(CHAN5);
01350
01360 TYPLOC(512,300); DPYOUT(0);
01370 IF ((READ←INCHRW)="P")∨(READ="p") THEN BEGIN
01380 OUTSTR(" EX DPYXGP[X,ALS] to plot this on the XGP."&CRLF);
01390 CALCOMP("PLOTX",DPYBUF); READ←INCHRW; END;
01395
01400 IF(READ="S")∨(READ="s") THEN BEGIN
01430 START_CODE MOVEI 0,0; '047000400017; END;
01432 FMAIN(PP);START_CODE '047000400023; END; END;
01435
01440 IF READ≠"E" THEN GOTO STARTP;
01450 END "GRAPH";